﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace server.app.table
{
    public class Item : Table<comm.objst.TableItem>
    {
        public int AllItemCount { get { return Orm.Count(); } }

        public Item(World world)
            : base(Conf.TABLE_NAME_PREFIX + typeof(Item).Name, world)
        {
        }

        public bool CreateItem(SQLx sqlx, comm.objst.TableItem tableItem)
        {
            return Orm.Insert(sqlx, tableItem);
        }
        public bool UpdateItem(SQLx sqlx, comm.objst.TableItem tableItem)
        {
            return Orm.Update(sqlx, tableItem);
        }

        public comm.objst.TableItem GetItem(string itemId)
        {
            return _world.DataManager.Call<comm.objst.TableItem>(sqlx =>
            {
                return GetItem(sqlx, itemId);
            });
        }
        public comm.objst.TableItem GetItem(SQLx sqlx, string itemId)
        {
            return Orm.GetObjectByKey(sqlx, itemId);
        }

        public comm.objst.TableItem[] GetAllItem(string[] itemIds)
        {
            return _world.DataManager.Call<comm.objst.TableItem[]>(sqlx =>
            {
                return GetAllItem(sqlx, itemIds);
            });
        }
        public comm.objst.TableItem[] GetAllItem(SQLx sqlx, string[] itemIds)
        {
            var sb = new StringBuilder();
            foreach (var itemId in itemIds)
            {
                sb.Append("'" + itemId + "',");
            }
            if (sb.Length > 0)
            {
                sb.Remove(sb.Length - 1, 1);
            }
            else
            {
                return new comm.objst.TableItem[] { };
            }
            return Orm.GetList(sqlx, "select * from [" + _tableName + "] where [" + comm.objst.TableItem.KEY_ITEM_ID + "] in (" + sb + ")");
        }
    }
}
